<?php

namespace App\Http\Controllers\Landscaping;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\Landscaping\ParkManintenance;
use Illuminate\Database\QueryException;
use App\Http\Requests\Landscaping\ParkManintenanceRequest;

/**
 * @group 基础信息管理->绿化->植被信息库->植被信息->绿植养护信息表
 *
 * 采用 restful api
 *
 * Body Parameters 表示请求的所需要的参数
 *
 * Query Parameters 表示返回参数的名称
 */

class ParkManintenanceController extends Controller
{
    /**
     * 绿植养护信息列表
     *
     * @bodyParam name string 植被名称
     * @bodyParam department_id int 作业部门id 外键 部门表
     *
     * @queryParam vegetation_id int 植被种类id 外键 植被种类表
     * @queryParam park_vegetation->vegetation->name string 植被种类名称
     * @queryParam park_vegetation->name string 植被名称
     * @queryParam period string 生长周期
     * @queryParam department_id int 作业部门id 外键 部门表
     * @queryParam department->name int 作业部门
     * @queryParam type int 作业类别 0-修剪 1-松土 2-浇水 3-除草 4-清理绿化垃圾
     * @queryParam unit string 周期单位 周 日
     * @queryParam num int 维护周期
     * @queryParam content text 作业内容
     */
    public function index(Request $request)
    {
        $parkManintenance = new ParkManintenance;
        $data = $parkManintenance->getList($request);
        return response()->json(encodeMsg($data,200));
    }

    /**
     * 新增绿植养护信息
     *
     * @bodyParam vegetation_id int 植被种类id
     * @bodyParam period string 生长周期
     * @bodyParam department_id int 作业部门id
     * @bodyParam type int 作业类别 0-修剪 1-松土 2-浇水 3-除草 4-清理绿化垃圾
     * @bodyParam unit string 周期单位 周 日
     * @bodyParam num int 维护周期
     * @bodyParam content text 作业内容
     *
     * @queryParam vegetation_id int 植被种类id
     * @queryParam period string 生长周期
     * @queryParam department_id int 作业部门id
     * @queryParam type int 作业类别 0-修剪 1-松土 2-浇水 3-除草 4-清理绿化垃圾
     * @queryParam unit string 周期单位 周 日
     * @queryParam num int 维护周期
     * @queryParam content text 作业内容
     */
    public function store(ParkManintenanceRequest $request)
    {
        try {
            $data = ParkManintenance::create($request->all());
            return response()->json(encodeMsg($data,201));
        } catch (QueryException $e) {
            return response()->json(encodeMsg(['message' => '绿植养护信息添加失败!'],400));
        }
    }

    /**
     * 查看绿植养护信息
     *
     * @bodyParam id int 绿植养护信息id
     *
     * @queryParam vegetation_id int 植被种类id 外键 植被种类表
     * @queryParam vegetation->type string 植被种类
     * @queryParam vegetation->name string 植被名称
     * @queryParam period string 生长周期
     * @queryParam department_id int 作业部门id
     * @queryParam department->name int 作业部门
     * @queryParam type int 作业类别 0-修剪 1-松土 2-浇水 3-除草 4-清理绿化垃圾
     * @queryParam unit string 周期单位 周 日
     * @queryParam num int 维护周期
     * @queryParam content text 作业内容
     */
    public function show($id)
    {
        $data = ParkManintenance::with(['department','parkVegetation.vegetation'])->find($id);
        if($data == []) {
            return response()->json(encodeMsg(["message" => "没有该绿植养护信息!"], 404));
        } else {
            return response()->json(encodeMsg($data,200));
        }
    }

    /**
     * 修改绿植养护信息
     *
     * @bodyParam id int 绿植养护信息id
     * @bodyParam vegetation_id int 植被种类id
     * @bodyParam period string 生长周期
     * @bodyParam department_id int 作业部门id
     * @bodyParam type int 作业类别 0-修剪 1-松土 2-浇水 3-除草 4-清理绿化垃圾
     * @bodyParam unit string 周期单位 周 日
     * @bodyParam num int 维护周期
     * @bodyParam content text 作业内容
     *
     * @queryParam vegetation_id int 植被种类id
     * @queryParam vegetation->type string 植被种类
     * @queryParam vegetation->name string 植被名称
     * @queryParam period string 生长周期
     * @queryParam department_id int 作业部门id
     * @queryParam department->name int 作业部门
     * @queryParam type int 作业类别 0-修剪 1-松土 2-浇水 3-除草 4-清理绿化垃圾
     * @queryParam unit string 周期单位 周 日
     * @queryParam num int 维护周期
     * @queryParam content text 作业内容
     */
    public function update(ParkManintenanceRequest $request, $id)
    {
        $parkManintenance = ParkManintenance::find($id);
        if($parkManintenance == []) {
            return response()->json(encodeMsg(["message" => "没有该绿植养护信息!"], 404));
        }
        try {
            $parkManintenance->update($request->all());
            return response()->json(encodeMsg($parkManintenance,200));
        } catch (QueryException $e) {
            return response()->json(encodeMsg(['message' => '绿植养护信息修改失败!'],400));
        }
    }

    /**
     * 删除绿植养护信息
     *
     * @bodyParam id int required 植被种类ID
     * @response 204 {
     *   "message": "绿植养护信息删除成功"
     * }
     *
     *
     * @response 404 {
     *  "message": "没有该绿植养护信息"
     * }
     */
    public function destroy($id)
    {
        $parkManintenance = ParkManintenance::find($id);
        if($parkManintenance == []) {
            return response()->json(encodeMsg(["message" => "没有该绿植养护信息!"], 404));
        }
        if($parkManintenance->delete()) {
            return response()->json(encodeMsg(["message" => "绿植养护信息删除成功!"], 204));
        } else {
            return response()->json(encodeMsg(["message" => "绿植养护信息删除失败!"], 400));
        }
    }

    /**
     * 批量删除绿植养护信息
     *
     * @bodyParam  ids int required id集合字符串[格式：ids=1,2,3]
     * @response 204 {
     *   "message": "绿植养护信息删除成功"
     * }
     *
     *
     */
    public function delete($ids)
    {
        $listId = explode(',', $ids);
        ParkManintenance::whereIn('id',$listId)->delete();
        return response()->json(encodeMsg(["message" => "绿植养护信息删除成功!"], 400));
    }
}
